package com.azt.utils;

import freemarker.cache.StringTemplateLoader;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.*;

import java.io.*;
import java.util.Map;

/**
 * @author 张栋  2016年7月7日下午5:19:57
 */
public class FreemarkerUtils {
	
	
	/**
	 * 生成静态化页面
	 * @param tempdir 模板路径 
	 * @param tempname 模板名称
	 * @param paramMap 参数
	 * @author 张栋  2016年7月7日下午5:20:01
	 * @throws IOException 
	 */
	public  static void  createHtml(String tempdir,String tempname,Map<String, Object> paramMap,String newname) throws Exception{
		
		//创建一个合适的Configration对象
		Configuration configuration = new Configuration();
		configuration.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);
		configuration.setDirectoryForTemplateLoading(new File(tempdir));
		configuration.setObjectWrapper(new DefaultObjectWrapper());
		configuration.setDefaultEncoding("UTF-8");   //这个一定要设置，不然在生成的页面中 会乱码
		//获取或创建一个模版。
		Template template = configuration.getTemplate(tempname);
		Writer writer  = new OutputStreamWriter(new FileOutputStream(tempdir+"/"+newname),"UTF-8");
		template.process(paramMap, writer);
		writer.flush();
		writer.close();
	}

	/**
	 * 解析字符串模板
	 * */
	public static String parseStr(String source, Map param) {
		try {
			String templateName = "template_" + System.currentTimeMillis();
			StringTemplateLoader stringLoader = new StringTemplateLoader();
			stringLoader.putTemplate(templateName, source);

			Configuration configuration = new Configuration();
			configuration.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);
			configuration.setDefaultEncoding("UTF-8");
			configuration.setTemplateLoader(stringLoader);

			Template template = configuration.getTemplate(templateName, "utf-8");
			StringWriter writer = new StringWriter();
			template.process(param, writer);
			writer.flush();
			writer.close();
			return writer.toString();
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}
	
	/**
	 * 设置静态类
	 * @param clz
	 * @return
	 * @author 张栋  2016年8月10日上午9:47:51
	 */
	@SuppressWarnings("rawtypes")
	public static TemplateModel getStaticModel(Class clz) {
		BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
		try {
			return wrapper.getStaticModels().get(clz.getName());
		} catch (TemplateModelException e) {
			e.printStackTrace();
		}
		return null;
	}
}
